Міністерство освіти і науки України
Національний університет
“Львівська політехніка”
Кафедра ЕОМ
КУРСОВИЙ ПРОЕКТ
з предмету:
“Системне програмне забезпечення”
на тему:
“Розробка і реалізація компонент
системного програмного забезпечння”
Львів-2007
Анотація
Транслятором називається програма перекладу (трансляції) початкової програми, записаною вхідною мовою, в еквівалентну їй об`єктну програму. Якщо мова високого рівня є вхідною, а мова асемблера чи машинна – вихідною, то такий транслятор називається компілятором.
Компілятори дозволяють створювати об`єктні модулі, які пізніше, після етапу зв`язування відлагоджувачем, перетворюються у виконавчі файли.
Потреба різноманіття компіляторів дуже важлива, це прямо залежить від вхідної мови, яку він перекладає. Кожна з них реалізує клас задач, необхідних для користувача.
Кажучи простіше, існує виконавець – автомат або персональна ЕОМ, що вміє реалізувати скінчений набір дій. Наказ на виконання дії з вказаного набору, що виражається певним, раніше обумовленим способом, називається розпорядженням, а вся сукупність допустимих наказів – системою розпорядження виконавця.
Даючи завдання виконавцю на деяку роботу, ми звичайно даємо йому не одне розпорядження, а деяку скінчену послідовність розпоряджень, задаючи також порядок, у якому вони виконуються. Така послідовність розпоряджень з вказанням порядку їх виконання називається програмою.
Саме програма на певній мові програмування є вхідним даним для компілятора, що разом з відлагоджувачем перекладає послідовність команд у спеціальні машинні коди і здійснює виконання вхідної послідовності команд запуском відповідного виконавчого файлу.
Завдання
Варіант 23;
Розробити компілятор вхідної мови програмування , короткий опис якої подано нижче:
типи даних: small;
оператор вводу: scanf ();
оператор виводу: printf ();
оператор початку програми: begin;
оператор закінчення програми: end;
константи: a1, a2, a3;
операції :*, / , - , +;
ідентифікатори змінних, числові константи;
оператор присвоєння: “:=” ;
23
begin
end.
k, l, m
a1, a2, a3
scanf
printf
small(2s)
(*,/),(+,-)
Після успішного виконання лексичного та синтаксичного аналізу згенерувати C-код, відкомпілювати і запустити його на виконання.
Зміст
Завдання 1Вступ 3
1. Аналітичний розділ 4
2. Розробка компілятора вхідної мови програмування 10
2.1. Формальний опис вхіднох мови програмування 10
2.2. Розробка лексичного аналізатора 13
2.3. Розробка синтаксичного аналізатора 15
2.4. Розробка генератора коду 17
3. Тестування компілятора 18
3.1. Виявлення лексичних помилок 19
3.2. Виявлення синтаксичних помилок 20
3.3. Загальна перевірка коректності роботи компілятора 214. Висновки 22
5. Література 23
Додатки: А. Лістинг програми компілятора вхідної мови програмування 24Б. Лістинг тестових програм на вхідній мові програмування 41Вступ
Компілятори становлять істотну частину програмного забезпечення ЕОМ. Це пов’язано з тим, що мови високого рівня стали основним засобом розробки програм. Тільки дуже незначна частина програмного забезпечення, що вимагає особливої ефективності, програмується за допомогою асемблерів. На сьогодні існує досить багато мов програмування. Нарівні з традиційними мовами, такими, як Fortran, широке поширення отримали так звані «універсальні мови» (Паскаль, Сі, Модула-2, Ада та інші), а також деякі спеціалізовані (наприклад, мова обробки облікових структур Лісп). Крім того, велике поширення отримали мови, пов’язані з вузькими предметними областями, такі, як вхідні мови пакетів прикладних програм.
Для деяких мов є досить багато реалізацій. Наприклад, реалізацій Паскаля, Модули-2 або Сі для ЕОМ типу IBM/PC на ринку десятки. З іншого боку, постійно зростаюча потреба в нових компіляторах пов’язана з бурхливим розвитком архітектури ЕОМ. Цей розвиток йде у ...